package com.newtouch.bxzs.account.service;

import com.newtouch.bxzs.account.model.UserRegisterVO;
import com.newtouch.bxzs.account.model.UserLoginVO;
import com.newtouch.bxzs.common.base.model.User;
import com.newtouch.bxzs.common.base.model.bo.UserMenuListBO;

import java.util.List;

/**
 * 登录用户Service
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021年1月13日</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author Amour
 * @version 1.0.0
 * @since 1.0.0
 */
public interface UserService {

    /**
     * 用户登录
     *
     * @param username          用户名
     * @param password          用户密码
     * @param userFlag          用户标识
     * @param loginDefultNumber 登录失败次数
     * @param lockTime          锁定时间
     * @return
     */
    User login4Pc(String username, String password, Integer userFlag, Integer loginDefultNumber, Integer lockTime);

    /**
     * 用户登录
     *
     * @param userLoginVO       登录请求参数VO
     * @param loginDefultNumber 登录失败次数
     * @param lockTime          锁定时间
     * @return
     */
    User login4Pc(UserLoginVO userLoginVO, Integer loginDefultNumber, Integer lockTime);

    /**
     * 获取用户菜单权限
     *
     * @param userId       用户ID
     * @param terminalType 用户类型
     * @return
     */
    List<UserMenuListBO> getMenuList(String userId, String terminalType);

    /**
     * 注册登录
     *
     * @return
     */
    User register(UserRegisterVO userRegisterVO);

    /**
     * 统一认证登录
     *
     * @param userLoginVO        vo
     * @param loginDefaultNumber 次数
     * @param lockTime           时间
     * @return
     */
    User loginByUnifiedAuth(UserLoginVO userLoginVO, Integer loginDefaultNumber, Integer lockTime);

    /**
     * 忘记密码,检查手机号是否存在
     *
     * @param userPhone
     * @return
     */
    String checkUserPhone(String userPhone);

    /**
     * 修改密码
     *
     * @param userPhone
     * @param password
     * @param confirmPassword
     * @return
     */
    Integer updateLoginPassword(String userPhone, String password, String confirmPassword);

    /** 注册时校验证件类型,证件号
     * @param certificateType   证件类型
     * @param certificateNumber 证件号
     * @return true false
     */
    Boolean checkCertificate(String certificateType, String certificateNumber);
}
